

package Negocio;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.*;

public class Factura 
{
    int id;
    Cliente cliente;
    Tratamiento tratamiento;
    Cita cita;
    String referencia;
    String estado;

    public String getEstado() {
        return estado;
    }

    public String getReferencia() {
        return referencia;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }
    
    public Cita getCita() {
        return cita;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public int getId() {
        return id;
    }

    public Tratamiento getTratamiento() {
        return tratamiento;
    }

    public void setCita(Cita cita) {
        this.cita = cita;
    }

    public void setCliente(Cliente clienteid) {
        this.cliente = clienteid;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setTratamiento(Tratamiento tratamiento) {
        this.tratamiento = tratamiento;
    }
    
    public Factura()
    {
        
    }
    
    public List<Factura> getByCliente( Connection conn,String email) throws SQLException
    {
        List <Factura> facturas= new ArrayList();
        Statement stmt =  conn.createStatement();
        Cliente cli = new Cliente();
        AdminDB adb = new AdminDB();
        
        cli.getByEmail(adb.getConnection(), email);
        int codigoCliente=cli.getId();
        ResultSet rset = stmt.executeQuery("SELECT * FROM `bysDB`.`Factura` where Cliente_ID="+codigoCliente+";");
        while(rset.next()){
               Factura fac= new Factura();
               Cita cta = new Cita();
               
               Tratamiento trat = new Tratamiento();
               //Codigo de la cita
               fac.setId(rset.getInt("ID"));
              //Cliente para la factura
               fac.setCliente(cli);
               //Cita de la factura
               int codigoCita =rset.getInt("Cita_ID");              
               cta.getByID(adb.getConnection(), codigoCita);
               fac.setCita(cta);
               //Tratamiento de la factura
               int codigoTratamiento =rset.getInt("Tratamiento_ID");
               trat.getbyID(adb.getConnection(),codigoTratamiento);
               fac.setTratamiento(trat);
               //Referencia
               fac.setReferencia(rset.getString("referencia"));
               //estado
               fac.setEstado(rset.getString("estado"));
               //insertar en la lista de facturas
               facturas.add(fac);
               
             
           }
           if (rset !=null) rset.close();
           if (stmt != null) stmt.close();
           if (conn != null)conn.close();

          
        return facturas;
    }
    
    public List<Factura> getAll(Connection conn) throws SQLException
    {
        List <Factura> facturas= new ArrayList();
        AdminDB adb = new AdminDB();
        Statement stmt =  conn.createStatement();
        ResultSet rset = stmt.executeQuery("SELECT * FROM `bysDB`.`Factura`");
        while(rset.next()){
               Factura fac= new Factura();
               Cita cta = new Cita();
               Cliente cli = new Cliente();
               Tratamiento trat = new Tratamiento();
               //Codigo de la cita
               fac.setId(rset.getInt("ID"));
               //Cliente de la factura
               int codigoCliente=rset.getInt("Cliente_ID");
               cli.getByID(adb.getConnection(), codigoCliente);
               fac.setCliente(cli);
               //Cita de la factura
               int codigoCita =rset.getInt("Cita_ID");              
               cta.getByID(adb.getConnection(), codigoCita);
               fac.setCita(cta);
               //Tratamiento de la factura
               int codigoTratamiento =rset.getInt("Tratamiento_ID");
               trat.getbyID(adb.getConnection(),codigoTratamiento);
               fac.setTratamiento(trat);
               //Referencia
               fac.setReferencia(rset.getString("referencia"));
               //estado
               fac.setEstado(rset.getString("estado"));
               //Insertar lista de factura
               facturas.add(fac);
           }
           if (rset !=null) rset.close();
           if (stmt != null) stmt.close();
           if (conn != null)conn.close();

          
        return facturas;
    }
    
   public boolean guardar(){  
        //El id de la factura no hace falta.
       //Debo convertir los datos a String, pero luego no me importa como se guardan en la BBDD
       //de eso se encarga el MySql
        ObjetoDB o = new ObjetoDB();       
        o.setTabla("Factura");
        int codigoCliente=cliente.getId();
        o.addCampo("Cliente_ID", String.valueOf(codigoCliente));
        int codigoTratamiento= tratamiento.getID();
        o.addCampo("Tratamiento_ID", String.valueOf(codigoTratamiento));
        int codigoCita=cita.getID();
        o.addCampo("Cita_ID", String.valueOf(codigoCita));   
        o.addCampo("referencia", referencia);
        o.addCampo("estado", estado);        
        AdminDB adb = new AdminDB();
        return adb.guardar(o);
    }
   
   public Factura getByID(Connection conn, int idFactura) throws SQLException
   {
       Statement stmt =  conn.createStatement();
       AdminDB adb = new AdminDB();
       Factura fac = new Factura();
        ResultSet rset = stmt.executeQuery("SELECT * FROM `bysDB`.`Factura` where ID="+idFactura+";");
        while(rset.next()){
             
               Cita cta = new Cita();
               Cliente cli = new Cliente();
               Tratamiento trat = new Tratamiento();
               //Codigo de la cita
               fac.setId(rset.getInt("ID"));
               //Cliente de la factura
               int codigoCliente=rset.getInt("Cliente_ID");
               cli.getByID(adb.getConnection(), codigoCliente);
               fac.setCliente(cli);
               //Cita de la factura
               int codigoCita =rset.getInt("Cita_ID");              
               cta.getByID(adb.getConnection(), codigoCita);
               fac.setCita(cta);
               //Tratamiento de la factura
               int codigoTratamiento =rset.getInt("Tratamiento_ID");
               trat.getbyID(adb.getConnection(),codigoTratamiento);
               fac.setTratamiento(trat);
               //Referencia
               fac.setReferencia(rset.getString("referencia"));
               //estado
               fac.setEstado(rset.getString("estado"));
               //Insertar lista de factura
               
           }
        return fac;
   }

   //para obtener la referencia, tienes que pasarme la fecha de la cita y el id de la cita a facturar
    String crearRef(String fecha, int id) {
         
        AdminDB ad = new AdminDB();
        return "BS"+ad.toREF(fecha)+id;
    }

    
            
}
